package com.itlaobing.mvc.controller;

import com.itlaobing.mvc.entity.Employee;
import com.itlaobing.mvc.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.util.Map;
import java.util.List;
import java.util.logging.Logger;

@Controller
@RequestMapping("/employee/**")
public class EmployeeController {

    private Logger logger = Logger.getLogger( this.getClass().getName() );

    @Autowired
    private EmployeeService service;

    @RequestMapping("/add/action")
    public String addAction(Employee e , RedirectAttributes ra){
        logger.info( e.toString() );
        service.save(e);

        // 使用 addAttribute方法 添加的 信息 会 以 查询字符串形式 附在重定向后的 URL 中 ，比如 url?id=10017
        ra.addAttribute("id" , e.getId());
        // 使用 addFlashAttribute方法添加的信息 最终会被添加到 HttpSession 对象的属性中
        ra.addFlashAttribute( "message" , "添加成功" );

        // 等到重定向成功后，
        // 从 会话 中取出 信息 并设置到 请求对象 中，随后从会话中删除信息，
        // 此时即可通过 请求对象 获取相关信息在相应的页面上取出数据

        //            prefix +     view-name      + suffix
        // "/WEB-INF/views/" + "employee/success" + ".html"
        return "redirect:/employee/success/page" ; // 默认是 forward 操作
    }

    @RequestMapping("/success/page")
    public String successPage(){
        // 如果是从 /customer/add/action 重定向到这里，
        // 则 会 可以从 请求对象 中获取 在 /customer/add/action 中通过 RedirectAttributes 设置的数据

        //            prefix +     view-name      + suffix
        // "/WEB-INF/views/" + "employee/success" + ".html"
        return "employee/success" ; // 默认是 forward 操作
    }

    @RequestMapping( "/list/page")
    public String listPage( Model model ){
        List<Employee> list = service.findAll();
        model.addAttribute( "employees" , list );
        return "employee/list" ; // 返回 视图名称( view-name )
    }

    @RequestMapping("remove/action/{id}")
    public String removeAction(@PathVariable("id") Integer id){
        logger.info( "即将删除 编号为 " + id + " 的员工" );
        service.remove( id );
        return "redirect:/employee/list/page" ;
    }

    public EmployeeService getService() {
        return service;
    }

    public void setService(EmployeeService service) {
        this.service = service;
    }
}
